package br.com.studyLife.controller;

import java.io.File;
import java.util.List;

import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.multipart.UploadedFile;
import br.com.caelum.vraptor.view.Results;
import br.com.studyLife.dao.UsuarioDao;
import br.com.studyLife.imagens.Imagens;
import br.com.studyLife.interceptor.MeuPerfil;
import br.com.studyLife.modelo.Usuario;
import br.com.studyLife.modelo.UsuarioWeb;

@Resource
public class PerfilController {

	private final UsuarioDao usuarioDao;
	private final UsuarioWeb usuarioWeb;
	private final Result result;
	private final Imagens imagens;
	
	public PerfilController(UsuarioDao usuarioDao, 
							Result result, 
							UsuarioWeb usuarioWeb, 
							Imagens imagens) {
		this.usuarioDao = usuarioDao;
		this.result = result;
		this.usuarioWeb = usuarioWeb;
		this.imagens = imagens;
	}
	
	@MeuPerfil
	@Get @Path("/perfil")
	public void perfil() { 
		
		if (usuarioWeb.getUser().getEmail() == null || usuarioWeb.getUser().getEmail().equals("")) {
			result.include("incompleto", "sim");
		} else {
			result.include("incompleto", "nao");
		}
		
	}
	@Get @Path(value="/perfil/{usuario.login}", priority=Path.LOWEST)
	public void perfilUsuario(Usuario usuario) {
		result.include("usuario", usuarioDao.procura(usuario.getLogin()));
	}
	
	@MeuPerfil
	@Get @Path("/perfil/alterar")
	public void alterar() {
	}
	
	@MeuPerfil
	@Post @Path("/perfil/alterar")
	public void editar(Usuario usuario) {
		usuario.setId(usuarioWeb.getUser().getId());
		usuario.setSenha(usuarioWeb.getUser().getSenha());
		usuarioDao.atualiza(usuario);
		result.redirectTo(this).perfil();
	}
	
	@Post @Path("/perfil/{usuario.id}/imagem")
	public void upload(Usuario usuario, final UploadedFile imagem) {
		imagens.salva(imagem, usuario);
		result.redirectTo(this).perfil();
	}
	@Get @Path("/perfil/{usuario.id}/imagem")
	public File download(Usuario usuario) {
		return imagens.mostra(usuario);
	}
	
	@Get @Path("/perfil/busca.json")
	public void buscaJson(String q) {
		result.use(Results.json())
					.withoutRoot()
					.from(usuarioDao.busca(q))
					.exclude("id", "senha")
					.serialize();
	}
	
	@MeuPerfil
	@Get @Path("/perfil/busca")
	public List<Usuario> busca(String pesquisa) {
		result.include("pesquisa", pesquisa);
		
		return usuarioDao.busca(pesquisa);
	}
}
